package Soligee.model.vo.cadastros;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name = "subcategoria")
public class SubcategoriaVO implements Serializable {

    @Id
    @SequenceGenerator(name = "cod_sub_categoria", sequenceName = "cod_sub_categoria_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cod_sub_categoria")
    @Column(name = "cod_sub_categoria", nullable = false)
    private int codSubCategoria;
    
    @Column(name = "descricao", nullable = false)
    private String descricao;

    @Column (name="ativo", nullable = false)
    private boolean ativo;

    @OneToMany(mappedBy = "subcategoria", fetch = FetchType.LAZY)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Collection<ProdutoVO> produto;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="cod_categoria", insertable=true, updatable=true, nullable = false)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private CategoriaVO codCategoria;

    public SubcategoriaVO() {
    }

    public SubcategoriaVO(int codSubcategoria, String descricao, CategoriaVO categoria) {
        this.setCodSubCategoria(codSubcategoria);
        this.setCodCategoria(categoria);
        this.setDescricao(descricao);
        this.setAtivo(true);
    }

    public int getCodSubCategoria() {
        return codSubCategoria;
    }

    public void setCodSubCategoria(int codSubCategoria) {
        this.codSubCategoria = codSubCategoria;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Collection<ProdutoVO> getProduto() {
        return produto;
    }

    public void setProduto(Collection<ProdutoVO> produto) {
        this.setProduto(produto);
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public CategoriaVO getCodCategoria() {
        return codCategoria;
    }

    public void setCodCategoria(CategoriaVO codCategoria) {
        this.codCategoria = codCategoria;
    }

  
}